如何高调使用Python函数式编程 |
您所在的位置:网站首页 › python 2的n次幂 › 如何高调使用Python函数式编程 |
如何高调使用Python函数式编程 首先我们考虑一个初学编程一般会了解的问题,计算n的阶乘,一个学过编程的程序猿可以简单的写出如下代码: def fact(n): return n == and or n * fact(n - ) ret = fact() # ret = 120这次我们的主角函数式编程,可以写出如下代码: fact = (lambda highfunc: highfunc(highfunc))(lambda func: lambda n: n == and or n * func(func)(n - )) ret = fact() # ret = 120如果不理解上面的代码,先来介绍一下基础的知识。 python 里面的匿名函数(lambda),在这里就不过多描述了,相信学过py的各位看官们应该比较熟悉他。 为了讲清楚这一点,我们首先来看一个例子,计算a的n次幂。我们很容易得到如下代码: def make_power_fn(power): def power_fn(base): return base ** power return power_fn p3 = make_power_fn() print(p3()) # 1000我们可以发现可以省略power_fn这个函数的名字,那样我们就可以得到下面的代码: def make_power_fn(power): return lambda base: base ** power更进一步的,我们可以得到如下代码: make_power_fn = lambda power: lambda base: base ** power理解了上述代码,我们现在可以讨论一开始提出的问题了,计算n的阶乘。 我们首先来实现递归,简单一点说,我们可以吧匿名函数作为参数传递下去,没听明白,我们来看一个简单的例子。 我们现在修改一下原始的计算阶乘的函数: def fact(func, n): return n == and or n * func(func, n - )然后我们把函数的定义取消掉。 fact = lambda func, n: n == and or n * func(func, n - ) print(fact(fact, )) # 120现在看起来已经比较好了,但是还是有func的参数传递,我们想要直接调用fact(),也就是说我们需要把后面那个函数作为参数传递给前面,最终我们便得到了一开始的代码。 终于讲完了,小白一枚,大佬们看看就好了。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |